﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace Main.Transport
{
    public enum EtatsConnexion
    {
        ConnexionEtablie,
        EnAttente

    }
    public class Connexion
    {
        private static List<Connexion> listeConnexions = new List<Connexion>();

        private byte idConnexionLogique;
        private EtatsConnexion etat;
        private byte applicationId;
        private byte adresseDestination;
        private Timer timer;
        private List<string> data;

        private Connexion(byte applicationId, byte adresseDestination)
        {
            if (listeConnexions.Count > 0)
                this.idConnexionLogique = (byte)(listeConnexions.Max(c => c.idConnexionLogique) + 1);
            else
               this.idConnexionLogique = 1;

            this.etat = EtatsConnexion.EnAttente;
            this.applicationId = applicationId;
            this.adresseDestination = adresseDestination;
        }

        public byte IdConnexionLogique { get { return idConnexionLogique; } }
        public EtatsConnexion Etat { get { return etat; } set { etat = value; } }
        public byte ApplicationId { get { return applicationId; } }
        public byte AdresseDestination { get { return adresseDestination; } }
        public static List<Connexion> ListeConnexions { get { return listeConnexions.ToList(); } }
        public List<string> Data { get { return data; } set { data = value; } }

        public static Connexion GetConnexion(byte applicationId, byte adresseDestination)
        {
            Connexion connexion = listeConnexions.Find(c => c.applicationId == applicationId && c.adresseDestination == adresseDestination);
            if (connexion == null)
            {
                connexion = new Connexion(applicationId, adresseDestination);
                listeConnexions.Add(connexion);
            }
            return connexion;
        }

        public static Connexion GetConnexion(byte idConnexionLogique)
        {
            Connexion connexion = listeConnexions.Find(c => c.idConnexionLogique == idConnexionLogique);
            return connexion;
        }

        public void Destroy()
        {
            listeConnexions.Remove(this);
        }
    }
}
